/*
* Script para crear la base de datos de CMSF
*/
USE master
GO
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'CMSF_DB')
	DROP DATABASE CMSF_DB
GO
-- Crear Base de datos
CREATE DATABASE CMSF_DB
GO
USE  CMSF_DB
GO

-- Tabla de Roles
CREATE TABLE Rol(
	RolId				INT PRIMARY KEY IDENTITY,
	Nombre 				VARCHAR(100) NOT NULL UNIQUE,
	CHECK (Nombre = 'Administrador' OR Nombre = 'Normal')
)

INSERT INTO Rol Values('Administrador'), ('Normal')

-- Tabla de Usuarios
CREATE TABLE Usuario(
	UsuarioId			INT PRIMARY KEY IDENTITY,
	RolId				INT NOT NULL,
	Nombre				VARCHAR(30) NOT NULL,
	NombreUsuario		VARCHAR(30) NOT NULL UNIQUE,
	Contraseña			VARCHAR(200) NOT NULL,
	Correo				VARCHAR(100),
	EstaActivo			BIT,
	FechaCumpleaños		DATETIME
)

ALTER TABLE Usuario ADD CONSTRAINT fk_Usuario_Rol FOREIGN KEY (RolId) REFERENCES Rol(RolId)

-- Tabla de Movimientos
CREATE TABLE Movimiento(
	MovimientoId		INT PRIMARY KEY IDENTITY,
	Descripcion			VARCHAR(200) NOT NULL,
	Fecha				DATETIME NOT NULL,
	Cantidad			DECIMAL(10,2) NOT NULL,
	Saldo				DECIMAL(10,2) NOT NULL
)

-- Tabla de Eventos
CREATE TABLE Evento(
	EventoId			INT PRIMARY KEY IDENTITY,
	UsuarioId			INT NOT NULL,
	Fecha				DATETIME NOT NULL,
	EstaAbierto			BIT
)

ALTER TABLE Evento ADD CONSTRAINT fk_Evento_Usuario FOREIGN KEY (UsuarioId) REFERENCES Usuario(UsuarioId)

-- Tabla Tipo de Pago
CREATE TABLE TipoPago(
	TipoPagoId			INT PRIMARY KEY IDENTITY,
	Descripcion			VARCHAR(100) NOT NULL
)

-- Tabla de EventoPago
CREATE TABLE EventoPago(
	EventoPagoId		INT PRIMARY KEY IDENTITY,
	EventoId			INT NOT NULL, 
	UsuarioId			INT NOT NULL,
	TipoPagoId			INT NOT NULL,
	Cantidad			DECIMAL(10,2) NOT NULL
)

ALTER TABLE EventoPago ADD CONSTRAINT fk_EventoPago_Usuario FOREIGN KEY (UsuarioId) REFERENCES Usuario(UsuarioId)
ALTER TABLE EventoPago ADD CONSTRAINT fk_EventoPago_Evento FOREIGN KEY (EventoId) REFERENCES Evento(EventoId)
ALTER TABLE EventoPago ADD CONSTRAINT fk_EventoPago_TipoPago FOREIGN KEY (TipoPagoId) REFERENCES TipoPago(TipoPagoId)

-- Tabla de Tipos de Pasteles
CREATE TABLE TipoPastel(
	TipoPastelId		INT PRIMARY KEY IDENTITY,
	Nombre				VARCHAR(100) NOT NULL
)

-- Tabla de Pastelerias
CREATE TABLE Pasteleria(
	PasteleriaId		INT PRIMARY KEY IDENTITY,
	Nombre				VARCHAR(100) NOT NULL,
	SitioWeb			VARCHAR(100) NOT NULL,
	Telefono			VARCHAR(100) NOT NULL,
	Ubicacion			VARCHAR(200) NOT NULL
)

-- Tabla de pasteles
CREATE TABLE Pastel(
	PastelId			INT PRIMARY KEY IDENTITY,
	PasteleriaId		INT NOT NULL,
	TipoPastelId		INT NOT NULL,
	Nombre				VARCHAR(100) NOT NULL,
	Imagen				VARCHAR(400)
)

ALTER TABLE Pastel ADD CONSTRAINT fk_Pastel_TipoPastel FOREIGN KEY (TipoPastelId) REFERENCES TipoPastel(TipoPastelId)
ALTER TABLE Pastel ADD CONSTRAINT fk_Pastel_Pasteleria FOREIGN KEY (PasteleriaId) REFERENCES Pasteleria(PasteleriaId)

-- Tabla de tamaños de pastel
CREATE TABLE PastelTamaño(
	PastelTamañoId		INT PRIMARY KEY IDENTITY,
	PastelId			INT NOT NULL,
	Tamaño				VARCHAR(10) NOT NULL
)

ALTER TABLE PastelTamaño ADD CONSTRAINT chk_PastelTamañoTamaño CHECK (Tamaño='CH' OR Tamaño = 'MED' OR Tamaño = 'GRA')
ALTER TABLE PastelTamaño ADD CONSTRAINT fk_PastelTamaño_Pastel FOREIGN KEY (PastelId) REFERENCES Pastel(PastelId)
